package Part1_泛型的使用;

import org.junit.Test;

import java.util.*;

/**
 * ClassName: CollectionTes
 * Package: IntelliJ IDEA
 * Description:
 * 集合框架在声明接口和其实现类时，使用了泛型(jdk5.0),在实例化集合对象时，
 * 如果没有使用泛型，则认为操作的是Object类型的数据；
 * 如果使用了泛型，则需要指明泛型的具体类型；
 * 一旦指明了泛型的具体类型，则在集合的相关的方法中，凡是使用了泛型的位置，都是使用指定的类型。
 * Written by HanXu
 * Create 2024.04.17 15:07
 */
public class CollectionTest {
    @Test
    public void test1(){

        //JDK7新特性
        HashMap<String, Integer> map = new HashMap<>();

        map.put("Tom", 79);
        map.put("AA", 69);
        map.put("BB", 89);

        //Set中存放的是Entry类型的元素,而Entry又带有泛型
        //Set<Map.Entry<String, Integer>> entry = map.entrySet();
        //var: 自动类型推断可使用var
        var entry = map.entrySet();

        Iterator<Map.Entry<String, Integer>> iterator = entry.iterator();

        while (iterator.hasNext()){
            Map.Entry<String, Integer> next = iterator.next();
            Integer score = next.getValue();
            String name = next.getKey();
            System.out.println(name+"-->"+score);

        }
    }
    @Test
    public void test2(){

        //自定义排序规则
        Comparator<Employee> comparator = new Comparator<>() {
            @Override
            public int compare(Employee o1, Employee o2) {
                if(!Objects.equals(o1.getBirth().getYear(), o2.getBirth().getYear()))
                    return o1.getBirth().getYear() - o2.getBirth().getYear();
                else {
                    if (!Objects.equals(o1.getBirth().getMonth(), o2.getBirth().getMonth()))
                        return o1.getBirth().getMonth() - o2.getBirth().getMonth();
                    else {
                        if (!Objects.equals(o1.getBirth().getDay(), o2.getBirth().getDay()))
                            return  o1.getBirth().getDay() - o2.getBirth().getDay();
                    }
                }
                return 0;
            }
        };

        TreeSet<Employee> set = new TreeSet<>(comparator);

        Employee e1 = new Employee("Tom",new BirthDay(1999,1,25));
        Employee e2 = new Employee("AAA",new BirthDay(1998,12,4));
        Employee e3 = new Employee("BBB",new BirthDay(1996,3,8));
        Employee e4 = new Employee("CCC",new BirthDay(1999,1,3));

        set.add(e1);
        set.add(e2);
        set.add(e3);
        set.add(e4);

        Iterator<Employee> iterator = set.iterator();

        while (iterator.hasNext()){
            Employee e =  iterator.next();
            String name = e.getName();
            String birth = e.getBirth().toString();
            System.out.println(name+"-->"+birth);
        }

    }
}
